package secondStage.part1;

/**
 * @ClassName: [ObjectOutputStreamDemo]
 * @Description: 继承
 * @Author: [黄劲松]
 * @CreateDate: [2021-02-08]
 * @Version: [v1.0]
 */
/*
继承是面向对象三大特征之一。可以使得子类具有父类的属性和方法，还可以在子类中重新定义，追加属性和方法
继承的格式
   ●格式: public class 子类名 extends 父类名{}
   ●范例: public class Zi extends Fu{}
   ●Fu:是父类,也被称为基类、超类
   ●Zi:是子类，也被称为派生类
继承中子类的特点:
●子类可以有父类的内容
●子类还可以有自己特有的内容
继承好处
●提高了代码的复用性(多个类相同的成员可以放到同一个类中)
●提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
继承弊端
●继承让类与类之间产生了关系， 类的耦合性增强了，当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性
什么时候使用继承?
●继承体现的关系: is a
●假设法: 我有两个类A和B，如果他们满足A是B的一种，或者B是A的一种，就说明他们存在继承关系，
        这个时候就可以考虑使用继承来体现，否则就不能滥用继承
●举例: 苹果和水果,猫和动物，猫和狗

继承中变量的访问特点：
在子类方法中访问一个变量
●先在子类局部范围找
●再在子类成员范围找
●最后在父类成员范围找

super关键字的用法和this关键字的用法相似
●this:代表本类对象的引用
●super:代表父类存储空间的标识可以理解为父类对象引用)
关键字         访问成员变量      访问构造方法      访问成员方法
this           this.成员变量    this(..)         this.成员方法(..)
               访问本类成员变量  访问本类构造方法   访问本类成员方法
super          super.成员变量   super(...)        super.成员方法(...)
               访问父类成员变量  访问父类构造方法    访问父类成员方法
*/
public class ExtendsDemo {
    public static void main(String[] args) {
        //创建对象，调用方法
        FuLei f = new FuLei();
        f.show();

        ZiLei z = new ZiLei();
        z.method();
        z.show();//子类中若没写public class Zi extends Fu{}将会报错
    }
}
